package certificate

// 生成ECDSA密钥对（P256曲线）dev.tekin.cn
func generateECDSAKeyPair() (*ecdsa.PrivateKey, error) {
    privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    if err != nil {
        return nil, fmt.Errorf("生成ECDSA私钥失败: %v", err)
    }
    return privateKey, nil
}

// 生成ECDSA自签名证书（修改generateSelfSignedCert函数）
func generateECDSASelfSignedCert(params CertParams) error {
    // 生成ECDSA密钥对
    privateKey, err := generateECDSAKeyPair()
    if err != nil {
        return err
    }
    publicKey := &privateKey.PublicKey

    // 构建证书模板（与RSA版本相同）
    template, err := buildCertificateTemplate(params)
    if err != nil {
        return err
    }

    // 生成证书（参数与RSA相同，公钥和私钥类型改为ECDSA）
    certBytes, err := x509.CreateCertificate(rand.Reader, template, template, publicKey, privateKey)
    if err != nil {
        return fmt.Errorf("生成ECDSA证书失败：%v", err)
    }

    // 保存证书（与RSA版本相同）
    if err := savePEMFile(params.OutCert, "CERTIFICATE", certBytes); err != nil {
        return err
    }

    // 保存ECDSA私钥（PEM类型为"EC PRIVATE KEY"）
    privateKeyBytes, err := x509.MarshalECPrivateKey(privateKey)
    if err != nil {
        return fmt.Errorf("序列化ECDSA私钥失败：%v", err)
    }
    if err := savePEMFile(params.OutKey, "EC PRIVATE KEY", privateKeyBytes); err != nil {
        return err
    }

    fmt.Println("✅ ECDSA自签名证书生成成功！")
    return nil
}
